﻿/**
 * Created by xjchen on 2020-03-03.
 * */

#ifndef MIDDLEWARE_IAPPDELEGATE_H
#define MIDDLEWARE_IAPPDELEGATE_H

#include <string>

class Parameters;

class DDSBridge;

typedef struct device_config {
    /** 计算线程池大小，可设置为核数； 对Ti 6678, 始终为7(从核数) */
    int calculationPoolSize;

    /** 通信服务端口，默认55261，非必要不要修改。如果要禁用该服务，只需要设置小于等于1024的值即可 */
    int servicePort;

    /** 需要静态分配IP时，可以指定IP地址 */
    std::string ip;

    /** UDP广播地址, 默认255.255.255.255 */
    std::string broadcast;

    /** RapidIO 设备ID */
    int deviceId;

    /** 用户代码版本(默认1.0), 以便用户对流图进行版本控制，并且通知中间件 */
    std::string userVersion;

    /**
     * 全局参数实例
     * 对Ti 6678, 可以保证在核0创建实例、注册参数；从核仅仅使用set_parameter_xxx()和get_parameter_xxx()
     * */
    Parameters *globalParametersInstance;

    /**
     * 如果引入第三方DDS中间件，只要实现DDSInterface，即可直接使用DDSReader和DDSWriter
     */
    DDSBridge *ddsBridgeImpl;

    /** 用户数据dds通信域 */
    std::string domainId = "1";

    /** 值不为-1时将调度线程绑定至选定核（Cygwin不可用） */
    int schedulerBindCpuCore;

    /** 软雷，udp组播网卡ip，接收报文用 */
    std::string multiCastIfIP = "";

    /** 软雷，管理用dds或AutoDetcet通信域，用于隔离 */
    std::string manageDomainId = "1";

    /** 软雷，管理用通信方式，可用：UDP/ZRDDS/OpenDDS/FastDDS */
    std::string manageCommMode = "UDP";

    /** 软雷，管理用通信方式是否不使用DataFormat.head部分 */
    bool manageIgnoreDFHead = true;

    /** 软雷，标识所在的设备*/
    std::string hostID = "000.000.000.0000";

    /** 软雷，部署方案中指定的应用实例名称*/
    std::string instanceName = "default";

    /** 软雷，心跳间隔，ms*/
    int interval = 2000;

} device_config_t;

class IAppDelegate {

public:
    virtual void onStart() = 0;

    virtual void onConfigure(device_config_t *config) = 0;
};


#endif /** MIDDLEWARE_IAPPDELEGATE_H */